namespace RBAC.Write.Api.Application.Command.QualityCommand
{
    using MediatR;
    using RBAC.ErrorCode;

    /// <summary>
    /// 更新质量工单 命令。
    /// </summary>
    /// <remarks>
    /// 处理器会根据 <see cref="Id"/> 加载未删除的工单，并按有值字段进行更新（空值不覆盖）。
    /// 成功返回受影响行数；当工单不存在或已删除时，返回 0 和失败信息。
    /// 
    /// 约束与说明：
    /// - <see cref="Id"/> 必填且 > 0。
    /// - <see cref="Status"/> 如提供，建议在处理器中进行枚举或范围校验（例如 0/1）。
    /// - 其他属性均为可选增量更新字段。
    /// 
    /// 调用示例（HTTP）：
    /// PUT api/QualityOrder/Update
    /// </remarks>
    /// </summary>
    public class QualityOrderUpdateCommand : IRequest<APIResult<int>>
    {
        /// <summary>
        /// 质量工单主键Id（必填，> 0）。
        /// </summary>
        public long Id { get; set; }

        /// <summary>
        /// 工单标题（可选，非空时更新）。
        /// </summary>
        public string? Title { get; set; }

        /// <summary>
        /// 来源工单号（可选，非空时更新）。
        /// </summary>
        public string? SourceWorkOrderNo { get; set; }

        /// <summary>
        /// 生产物品 Id（可选，> 0 时更新）。
        /// </summary>
        public long? ProductId { get; set; }

        /// <summary>
        /// 生产物品名称（可选，非空时更新）。
        /// </summary>
        public string? ProductName { get; set; }

        /// <summary>
        /// 负责人用户 Id（可选，> 0 时更新）。
        /// </summary>
        public long? OwnerUserId { get; set; }

        /// <summary>
        /// 负责人用户名称（可选，非空时更新）。
        /// </summary>
        public string? OwnerUserName { get; set; }

        /// <summary>
        /// 工单状态（可选）。建议仅允许预定义的状态值。
        /// </summary>
        public int? Status { get; set; }

        /// <summary>
        /// 备注（可选，非空时更新）。
        /// </summary>
        public string? Remark { get; set; }
    }
}
